using System;
using System.Data;
using Csla;
using Csla.Data;
using Microsoft.Practices.ServiceLocation;
using Utpl.Syllabus.Reconocimiento.BL;
using Utpl.Syllabus.Reconocimiento.DAL;
using Utpl.Syllabus.Framework.Dal;
using Utpl.Syllabus.Infraestructure.DalAdo;

namespace Utpl.Syllabus.Reconocimiento.DalAdo
{
    /// <summary>
    /// Estereotipo: Dao 
    /// Responsabilidad: Persistencia para la entidad : variacion_componente
    /// </summary> 
    public class PlanEstudioEstudianteAsignaturaDao : GenericDaoBase
    {
        #region Constructor

        /// <summary>
        /// Constructor: Inicializa los nombres de los procedimientos almacenados necesarios 
        /// durante el proceso de CRUD de variacion_componente
        /// </summary>
        /// <param name="db"></param>
        public PlanEstudioEstudianteAsignaturaDao(IDatabase db)
            : base(ServiceLocator.Current.GetInstance<IDatabase>(Constantes.CONEXION_SIS_RECONOCIMIENTO))
        {
            SetParameterPrefix("asg_");

            RegisterQuery<PlanEstudioCriteria>(Constantes.PRC_OBT_PROGR_ESTUDIANT_COMP);
        }

        #endregion

        #region Criteria

        /// <summary>
        /// Reperesenta los criterios de busqueda
        /// </summary>
        /// <param name="criteria">Id del programa academico del sistema anterior</param>
        /// <param name="comando">Representa el comando a ejecutar en la Base de Datos</param>
        protected void AddCriteriaParameters(PlanEstudioCriteria criteria, IDbCommand comando)
        {
            _db.AddParameterWithValue(comando, "ec_identificacion", criteria.Identificacion);
            _db.AddParameterWithValue(comando, "en_pln_id", criteria.PlanEstudioId);
            _db.AddParameterWithValue(comando, "ec_tipo_aprobacion", criteria.TipoAprobacion );
        }

        
        #endregion

        #region Entidad
        
        /// <summary>
        ///  Setea las propiedades  de nuestro objeto de negocio variacion_componente con los valores obtenidos de la DB
        ///  al momento de Obtener un/a variacion_componente
        /// </summary>
        /// <param name="sdr"></param>
        /// <param name="item"></param>
        private void LoadFields(SafeDataReader sdr, PlanEstudioEstudianteAsignaturaInfo item)
        {
            item.AsignaturaId = Convert.ToInt32(sdr.GetValue("asg_id"));
            item.Nivel = Convert.ToInt32(sdr.GetValue("pas_nivel"));
            if (sdr.GetValue("ase_grupo_creditos") != null)
                item.GrupoCreditoId = Convert.ToInt32(sdr.GetValue("ase_grupo_creditos"));
            item.Codigo = sdr.GetString("asg_codigo");
            item.Nombre = sdr.GetString("asg_nombre");
            item.GrupoCredito = sdr.GetString("grupo_creditos");
            if (sdr.GetValue("ase_creditos_academicos") != null)
                item.Creditos = Convert.ToInt32(sdr.GetValue("ase_creditos_academicos"));
            item.Nota = Convert.ToInt32(sdr.GetValue("ase_puntaje"));
            item.PlanEstudioId = Convert.ToInt32(sdr.GetValue("pln_id"));
           
        }

        #endregion
    }
}